package com.ruoyi.system.service.impl;

import java.util.List;

import com.ruoyi.common.annotation.DataScope;
import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.system.domain.IotVariable;
import com.ruoyi.system.domain.vo.IotDeviceTemplatesVo;
import com.ruoyi.system.mapper.IotDeviceMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.system.mapper.IotDeviceTemplatesMapper;
import com.ruoyi.system.domain.IotDeviceTemplates;
import com.ruoyi.system.service.IIotDeviceTemplatesService;
import org.springframework.transaction.annotation.Transactional;

/**
 * 设备模板Service业务层处理
 * 公司名称：未可自动化 <br/>
 * 作者：weikeauto <br/>
 */
@Service
public class IotDeviceTemplatesServiceImpl implements IIotDeviceTemplatesService 
{
    @Autowired
    private IotDeviceTemplatesMapper iotDeviceTemplatesMapper;

    @Autowired
    private IotDeviceMapper iotDeviceMapper;
    /**
     * 查询设备模板
     * 
     * @param id 设备模板主键
     * @return 设备模板
     */
    @Override
    public IotDeviceTemplates selectIotDeviceTemplatesById(Long id)
    {
        return iotDeviceTemplatesMapper.selectIotDeviceTemplatesById(id);
    }

    /**
     * 查询设备模板列表
     * 
     * @param iotDeviceTemplates 设备模板
     * @return 设备模板
     */
    @Override
    @DataScope(deptAlias = "sd")
    public List<IotDeviceTemplatesVo> selectIotDeviceTemplatesList(IotDeviceTemplates iotDeviceTemplates)
    {
        return iotDeviceTemplatesMapper.selectNewIotDeviceTemplatesList(iotDeviceTemplates);
    }

    /**
     * 新增设备模板
     * 
     * @param iotDeviceTemplates 设备模板
     * @return 结果
     */
    @Override
    public IotDeviceTemplates insertIotDeviceTemplates(IotDeviceTemplates iotDeviceTemplates)
    {
        // 数据重复性校验
        int tempNameCount = iotDeviceTemplatesMapper.selectIotDeviceTemplatesByName(iotDeviceTemplates.getTemplatesName());
        if (tempNameCount > 0) {
            throw new ServiceException("模板名称重复");
        }
        iotDeviceTemplates.setCreateTime(DateUtils.getNowDate());
        iotDeviceTemplates.setUpdateTime(DateUtils.getNowDate());
        iotDeviceTemplatesMapper.insertIotDeviceTemplates(iotDeviceTemplates);
        return iotDeviceTemplates;
    }

    /**
     * 修改设备模板
     * 
     * @param iotDeviceTemplates 设备模板
     * @return 结果
     */
    @Override
    public int updateIotDeviceTemplates(IotDeviceTemplates iotDeviceTemplates)
    {
        iotDeviceTemplates.setUpdateTime(DateUtils.getNowDate());
        return iotDeviceTemplatesMapper.updateIotDeviceTemplates(iotDeviceTemplates);
    }

    /**
     * 批量删除设备模板
     * 
     * @param ids 需要删除的设备模板主键
     * @return 结果
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public int deleteIotDeviceTemplatesByIds(Long[] ids)
    {
         //  如果模板被设备使用  无法删除
        int deviceCount = iotDeviceMapper.selectDeviceByTempIds(ids);
        if(deviceCount>0){
            throw  new ServiceException("此模板已被设备引用，请先删除相关设备");
        }
        iotDeviceTemplatesMapper.deleteIotDeviceTemplatesByIds(ids);
        iotDeviceTemplatesMapper.deleteIotVariableByTempIds(ids);
        return 1;
    }

    /**
     * 删除设备模板信息
     * 
     * @param id 设备模板主键
     * @return 结果
     */
    @Override
    @Transactional(rollbackFor = Exception.class)
    public int deleteIotDeviceTemplatesById(Long id) {
        iotDeviceTemplatesMapper.deleteIotVariableByTempId(id);
        iotDeviceTemplatesMapper.deleteIotDeviceTemplatesById(id);
        return 1;
    }

    @Override
    public String importVariable(List<IotVariable> variableList, String operName) {
        return null;
    }
}
